package cn.deng.test;


import cn.deng.mybatis.binding.MapperProxyFactory;
import cn.deng.mybatis.binding.MapperRegistry;
import cn.deng.mybatis.io.Resources;
import cn.deng.mybatis.session.SqlSession;
import cn.deng.mybatis.session.SqlSessionFactory;
import cn.deng.mybatis.session.SqlSessionFactoryBuilder;
import cn.deng.mybatis.session.defaults.DefaultSqlSessionFactory;
import cn.deng.test.dao.IUserDao;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.Map;

/**
 * @author: DengJingWen deng
 * @description:
 * @create: 2025-05-16
 */
public class ApiTest {

   private static final Logger logger = LoggerFactory.getLogger(ApiTest.class);

    @Test
    public void test_SqlSessionFactory() throws IOException {
//        MapperProxyFactory<IUserDao> factory = new MapperProxyFactory<>(IUserDao.class);
//        Map<String, String> sqlSession = new HashMap<>();
//
//        sqlSession.put("cn.deng.test.dao.IUserDao.queryUserName", "模拟执行 Mapper.xml 中 SQL 语句的操作：查询用户姓名");
//        sqlSession.put("cn.deng.test.dao.IUserDao.queryUserAge", "模拟执行 Mapper.xml 中 SQL 语句的操作：查询用户年龄");
//        IUserDao userDao = factory.newInstance(sqlSession);
//
//        String res = userDao.queryUserName("10001");
//       logger.info("测试结果：{}", res);
    }

//    @Test
//    public void test_MapperProxyFactory2() {
//        // 1. 注册 Mapper
//        MapperRegistry registry = new MapperRegistry();
//        registry.addMappers("cn.deng.test.dao");
//
//        // 2. 从 SqlSession 工厂获取 Session
//        SqlSessionFactory sqlSessionFactory = new DefaultSqlSessionFactory(registry);
//        SqlSession sqlSession = sqlSessionFactory.openSession();
//
//        // 3. 获取映射器对象
//        IUserDao userDao = sqlSession.getMapper(IUserDao.class);
//
//        // 4. 测试验证
//        String res = userDao.queryUserName("10001");
//        logger.info("测试结果：{}", res);
//    }

    @Test
    public void test_SqlSessionFactory3() throws IOException {
        // 1、读取mybatis总配置文件，获取对应Reader对象
        // 2、通过获取的Reader对象，创建SqlSessionFactory工厂
        Reader reader = Resources.getResourceAsReader("mybatis-config-datasource.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 2. 获取映射器对象
        IUserDao userDao = sqlSession.getMapper(IUserDao.class);

        // 3. 测试验证
        String res = userDao.queryUserInfoById("10001");
        logger.info("测试结果：{}", res);
    }

}
